#ifndef COMMON_H
#define COMMON_H

#include <QWidget>
#include <QIcon>
#include <QDebug>
#include <QThread>
#include <QStyle>
#include <QApplication>
#include <QFile>
#include <QFrame>
#include <QCoreApplication>
#include <QPixmap>
#include <QProcess>
#include <QScreen>
#include <QDateTime>

#include <bitset>
#include <iostream>

inline QDebug operator<<(QDebug debug,const std::string& str)
{
    debug << QString::fromStdString(str);
    return debug;
}

#ifndef qout
#define qout qDebug()
#endif

#define now_time (QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"))


///
/// \brief：区别于标准库的assert ，只有当AssertReturnVal的expr为真是，返回RetVal，结束函数，程序不退出
///
#define AssertReturnVal(expr,RetVal)  \
do  \
{   \
    if(static_cast<bool>(expr))    \
    {   \
        qDebug() << "[" << __FILE__ << "]["<< __func__ <<"][" << __LINE__ << "] Assertion" << #expr << "is" << (expr) << ",return the function!";\
        return RetVal;\
    }\
} while(0)


///
/// \brief：区别于标准库的assert ，只有当AssertReturnVal的expr为真是，return结束当前函数，程序不退出
///
#define AssertReturn(expr)  \
do  \
{   \
    if(static_cast<bool>(expr))    \
    {   \
            qDebug() << "[" << __FILE__ << "]["<< __func__ <<"][" << __LINE__ << "] Assertion" << #expr << "is" << (expr) << ",return the function!";\
            return;\
    }\
} while(0)

namespace Functions {

    QString WeekE2C(const QString & English);//英文星期转中中文

    bool getAVType(const QString &AVFile);

    inline void sleep(unsigned long s);

    inline void msleep(unsigned long ms);

    inline void usleep(unsigned long us);

    std::string toBit(const void* data, size_t size);

}

#endif // COMMON_H
